// Package middlewares 定义了中间件函数。
// 该文件定义了 AuthMiddleWare，用于验证请求的 JWT 令牌。
package middlewares

import (
	"exchangeapp/utils"
	"net/http"

	"github.com/gin-gonic/gin"
)

// AuthMiddleWare 是一个 Gin 中间件函数，用于验证请求头中的 JWT 令牌。
// 如果令牌有效，将用户名存储在上下文中；否则返回 401 未授权错误。
func AuthMiddleWare() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		// 从请求头中获取 Authorization 字段。
		token := ctx.GetHeader("Authorization")
		if token == "" {
			// 如果没有提供令牌，返回 401 未授权错误。
			ctx.JSON(http.StatusUnauthorized, gin.H{"error": "Missing Authorization Header"})
			ctx.Abort() // 中止请求处理链。
			return
		}

		// 调用 utils.ParseJWT 解析令牌，获取用户名。
		username, err := utils.ParseJWT(token)
		if err != nil {
			// 如果令牌无效，返回 401 未授权错误。
			ctx.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid token"})
			ctx.Abort() // 中止请求处理链。
			return
		}

		// 将用户名存储在上下文中，供后续处理使用。
		ctx.Set("username", username)
		ctx.Next() // 继续处理请求。
	}
}
